import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 通知公告控制器 / 通知公告控制器添加
 * @param {object} data
 * @param {array<number>} [data.attachmentIds] 附件ID（通过文件上传返回的ID）
 * @param {string} [data.content] 内容
 * @param {number} [data.id] id
 * @param {string} [data.title] 标题
 * @param {string} [data.type] 类型（公告、通知） 可选值: BULLETIN, NOTICE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementAdd(data, config) {
  return post("/management/announcement/add", data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器审核通过
 * @param {object} data
 * @param {number} [data.id] id
 * @param {string} [data.reviewComments] reviewComments
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementApproved(data, config) {
  return post("/management/announcement/approved", data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器审核拒绝
 * @param {object} data
 * @param {number} [data.id] id
 * @param {string} [data.reviewComments] reviewComments
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementAuditReject(data, config) {
  return post("/management/announcement/auditReject", data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器删除
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 陈凯
 */
export function managementAnnouncementDelete(params, data, config) {
  return postWithQueryParams("/management/announcement/delete", params, data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器查询详情
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementDetail(params, config) {
  return get("/management/announcement/detail", params, config);
}

/**
 * 通知公告控制器 / 通知公告控制器分页查询
 * @param {object} data
 * @param {string} [data.auditStatus] 审核状态:0待提交 1审核中 2审批通过 3拒绝 可选值: APPROVED, NOT_SUBMITTED, REVIEW_REJECTION, UNDER_REVIEW
 * @param {string} [data.endTime] 结束时间
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.publishStatus] 发布状态：1已废止；0已发布 可选值: PUBLISHED, REPEALED
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.startTime] 起始时间
 * @param {string} [data.title] 标题
 * @param {string} [data.type] 类型 可选值: BULLETIN, NOTICE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<Announcement页面展示实体>>}
 * @author 陈凯
 */
export function managementAnnouncementList(data, config) {
  return post("/management/announcement/list", data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器编辑提交
 * @param {object} data
 * @param {array<number>} [data.attachmentIds] 附件ID（通过文件上传返回的ID）
 * @param {string} [data.content] 内容
 * @param {number} [data.id] id
 * @param {string} [data.title] 标题
 * @param {string} [data.type] 类型 可选值: BULLETIN, NOTICE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementPublishDraft(data, config) {
  return post("/management/announcement/publishDraft", data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器发布
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 陈凯
 */
export function managementAnnouncementRelease(params, data, config) {
  return postWithQueryParams("/management/announcement/release", params, data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器废止
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 陈凯
 */
export function managementAnnouncementRepealed(params, data, config) {
  return postWithQueryParams("/management/announcement/repealed", params, data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器存草稿
 * @param {object} data
 * @param {array<number>} [data.attachmentIds] 附件ID（通过文件上传返回的ID）
 * @param {string} [data.content] 内容
 * @param {number} [data.id] id
 * @param {string} [data.title] 标题
 * @param {string} [data.type] 类型（公告、通知） 可选值: BULLETIN, NOTICE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementSaveDraft(data, config) {
  return post("/management/announcement/saveDraft", data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器提交
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementSubmit(params, data, config) {
  return postWithQueryParams("/management/announcement/submit", params, data, config);
}

/**
 * 通知公告控制器 / 通知公告控制器更新
 * @param {object} data
 * @param {array<number>} [data.attachmentIds] 附件ID（通过文件上传返回的ID）
 * @param {string} [data.content] 内容
 * @param {number} [data.id] id
 * @param {string} [data.title] 标题
 * @param {string} [data.type] 类型 可选值: BULLETIN, NOTICE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Announcement页面展示实体>}
 * @author 陈凯
 */
export function managementAnnouncementUpdate(data, config) {
  return post("/management/announcement/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} Announcement页面展示实体 页面展示实体
 * @property {string} auditStatus 审核状态:0待提交 1审核中 2通过 3拒绝 可选值: APPROVED, NOT_SUBMITTED, REVIEW_REJECTION, UNDER_REVIEW
 * @property {string} content 内容
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} id
 * @property {string} publishStatus 发布状态：0已发布；1已废止 可选值: PUBLISHED, REPEALED
 * @property {string} realName 真实姓名
 * @property {string} title 标题
 * @property {string} type 类型
 * @property {number} visitorsFrequency 查阅人次
 * @property {number} visitorsNumber 查阅人数
 * @description 页面展示实体
 */
